/* CirKit: A circuit toolkit
 * Copyright (C) 2009-2015  University of Bremen
 * Copyright (C) 2015-2017  EPFL
 *
 * Permission is hereby granted, free of charge, to any person
 * obtaining a copy of this software and associated documentation
 * files (the "Software"), to deal in the Software without
 * restriction, including without limitation the rights to use,
 * copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following
 * conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 */

#include "mig_functional_hashing_constants.hpp"

namespace cirkit
{

/******************************************************************************
 * Types                                                                      *
 ******************************************************************************/

const std::unordered_map<unsigned, std::tuple<unsigned, unsigned, std::map<char, unsigned>, std::string>> mig_functional_hashing_constants::min_mig_sizes = {
{ 0x1ee1, std::make_tuple( 4u, 4u, std::map<char, unsigned>{{'c', 1u}, {'d', 2u}, {'a', 3u}, {'b', 3u}}, std::string( "<c<!c!d<!0ab>><d!<!0ab><!c!d<!0ab>>>>" ) ) },
{ 0x1be4, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'a', 2u}, {'c', 2u}, {'d', 2u}, {'b', 3u}}, std::string( "<<0a!c>!<!d!<!0ab><0a!c>>!<d<!0ab><!d!<!0ab><0a!c>>>>" ) ) },
{ 0x1bd8, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'b', 3u}, {'c', 3u}, {'d', 3u}, {'a', 3u}}, std::string( "<0!<0!<b!c!d><abc>><!0!<b!c!d><abc>>>" ) ) },
{ 0x18e7, std::make_tuple( 4u, 4u, std::map<char, unsigned>{{'c', 1u}, {'d', 2u}, {'a', 3u}, {'b', 3u}}, std::string( "<c!<c!d<abc>>!<d!<abc><c!d<abc>>>>" ) ) },
{ 0x17e8, std::make_tuple( 4u, 4u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<abc><!0!d!<abc>><0d<!0!d!<abc>>>>" ) ) },
{ 0x17ac, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'d', 2u}, {'a', 2u}}, std::string( "<<b!c<0!bd>>!<0ad><ac<0!bd>>>" ) ) },
{ 0x1798, std::make_tuple( 6u, 4u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'d', 2u}, {'c', 2u}}, std::string( "<!<0a!<0b!d>>!<c!d!<0a<0b!d>>><a!bc>>" ) ) },
{ 0x1796, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<abc>!<!0!cd><a<!0!cd><!0bd>>>" ) ) },
{ 0x178e, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'b', 2u}, {'d', 2u}, {'a', 2u}, {'c', 2u}}, std::string( "<!<0bd><ab!c><0!ad>>" ) ) },
{ 0x177e, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'c', 2u}, {'d', 3u}, {'b', 2u}}, std::string( "<<a!c<0!cd>><bc!<0!cd>><!a!b!<0cd>>>" ) ) },
{ 0x16e9, std::make_tuple( 6u, 5u, std::map<char, unsigned>{{'d', 1u}, {'c', 3u}, {'a', 3u}, {'b', 3u}}, std::string( "<d<!d!<!0c<0ab>>!<!a!b<0ab>>><<!0c<0ab>><!a!b<0ab>><!d!<!0c<0ab>>!<!a!b<0ab>>>>>" ) ) },
{ 0x16bc, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'d', 2u}, {'b', 2u}, {'c', 2u}, {'a', 2u}}, std::string( "<!<!0d<0!b!c>>!<abc><ad!<0!b!c>>>" ) ) },
{ 0x169e, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'c', 2u}, {'b', 2u}, {'d', 3u}}, std::string( "<<0!ac><ab!c>!<b<0ad><0!ac>>>" ) ) },
{ 0x3f, std::make_tuple( 2u, 2u, std::map<char, unsigned>{{'d', 1u}, {'b', 2u}, {'c', 2u}}, std::string( "<0!d!<0bc>>" ) ) },
{ 0x359, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'a', 2u}, {'d', 2u}, {'c', 2u}, {'b', 2u}}, std::string( "<<!0!ad><c!d<0b!<!0!ad>>>!<bc!<0b!<!0!ad>>>>" ) ) },
{ 0x672, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'a', 2u}, {'b', 2u}}, std::string( "<<!0!c!d>!<!0!ab><!ac<0bd>>>" ) ) },
{ 0x7e9, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'d', 2u}, {'a', 2u}, {'b', 2u}, {'c', 2u}}, std::string( "<<0!d<abc>><!a!bd>!<0c<!a!bd>>>" ) ) },
{ 0x693, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'b', 2u}, {'d', 2u}, {'c', 2u}, {'a', 2u}}, std::string( "<<!b!d<0c!d>>!<abc><abd>>" ) ) },
{ 0x358, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'d', 2u}, {'b', 2u}, {'c', 2u}, {'a', 2u}}, std::string( "<<0d!<bcd>><!ab!<bcd>><ac<!0a!d>>>" ) ) },
{ 0x1bf, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'d', 1u}, {'a', 2u}, {'c', 2u}, {'b', 2u}}, std::string( "<!d<0!a!c><!0a!b>>" ) ) },
{ 0x6996, std::make_tuple( 6u, 5u, std::map<char, unsigned>{{'a', 3u}, {'c', 3u}, {'b', 2u}, {'d', 2u}}, std::string( "<!<!0<0a!c><!ac<0a!c>>><b!d<!0<0a!c><!ac<0a!c>>>><!bd<!0<0a!c><!ac<0a!c>>>>>" ) ) },
{ 0x356, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'d', 2u}, {'b', 3u}, {'c', 3u}}, std::string( "<<0!ad>!<a<0!ad><!0bc>><a!<0!ad><!0bc>>>" ) ) },
{ 0x1bd, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'c', 2u}, {'b', 2u}, {'d', 2u}}, std::string( "<!<a!c<0bd>><0ab><!b!c!d>>" ) ) },
{ 0x1f, std::make_tuple( 3u, 3u, std::map<char, unsigned>{{'c', 1u}, {'d', 1u}, {'a', 2u}, {'b', 3u}}, std::string( "<!c!d!<!0a<!0b!c>>>" ) ) },
{ 0x1ac, std::make_tuple( 6u, 5u, std::map<char, unsigned>{{'b', 2u}, {'d', 2u}, {'a', 3u}, {'c', 3u}}, std::string( "<0!<bd<0ad>>!<0<!bc!d>!<ac<bd<0ad>>>>>" ) ) },
{ 0x1e, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'c', 2u}, {'a', 3u}, {'b', 3u}, {'d', 2u}}, std::string( "<0!<0c<!0ab>><c!d<!0ab>>>" ) ) },
{ 0x676, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<0!<0ab>!<0<!a!bc><!cd!<0ab>>>>" ) ) },
{ 0x1ab, std::make_tuple( 4u, 4u, std::map<char, unsigned>{{'a', 2u}, {'d', 2u}, {'b', 3u}, {'c', 3u}}, std::string( "<0!<0ad>!<!a<0ad>!<!b!c<0ad>>>>" ) ) },
{ 0x1aa, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'d', 1u}, {'a', 2u}, {'c', 3u}, {'b', 4u}}, std::string( "<d<0a!d><!a!d!<!ac<0!ab>>>>" ) ) },
{ 0x1b, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'a', 2u}, {'c', 2u}, {'d', 2u}, {'b', 2u}}, std::string( "<0!<acd>!<!abd>>" ) ) },
{ 0x7e1, std::make_tuple( 5u, 5u, std::map<char, unsigned>{{'c', 2u}, {'a', 3u}, {'b', 3u}, {'d', 2u}}, std::string( "<!0<0!c!<ab!d>>!<!0d!<c<ab!d><0!c!<ab!d>>>>>" ) ) },
{ 0x7e0, std::make_tuple( 5u, 5u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'a', 3u}, {'d', 2u}}, std::string( "<<!b!c!<a!bd>>!<0!d<!b!c!<a!bd>>><0!d!<0!d<!b!c!<a!bd>>>>>" ) ) },
{ 0x189, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'a', 2u}, {'d', 3u}}, std::string( "<!<0!bc>!<!0ab><0b<0a!d>>>" ) ) },
{ 0x3de, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'a', 3u}, {'d', 2u}}, std::string( "<!<!bc<!ab!d>>!<0bd><0c<!ab!d>>>" ) ) },
{ 0x35a, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'c', 2u}, {'d', 2u}, {'b', 3u}}, std::string( "<<0a!c>!<cd<0b!c>><!acd>>" ) ) },
{ 0x1686, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'b', 1u}, {'a', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<!b<ab!c><b<!ac!d><0!ad>>>" ) ) },
{ 0x186, std::make_tuple( 5u, 5u, std::map<char, unsigned>{{'a', 2u}, {'d', 2u}, {'b', 3u}, {'c', 2u}}, std::string( "<0!<ad<0b!c>>!<!ac<!b!d<ad<0b!c>>>>>" ) ) },
{ 0x3db, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'d', 2u}, {'a', 3u}}, std::string( "<<0!b!c><b!d!<abc>><!0!b<abc>>>" ) ) },
{ 0x357, std::make_tuple( 3u, 3u, std::map<char, unsigned>{{'d', 1u}, {'b', 2u}, {'c', 2u}, {'a', 2u}}, std::string( "<!d<0!b!c><!0!a<0!b!c>>>" ) ) },
{ 0x1be, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'d', 2u}, {'b', 2u}, {'c', 2u}}, std::string( "<<0a!d><!b!c!d><!0c!<a!b!d>>>" ) ) },
{ 0x1683, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'a', 2u}, {'c', 2u}, {'d', 2u}, {'b', 2u}}, std::string( "<<!ac!d><!b!c<0!ad>><ab<!b!c<0!ad>>>>" ) ) },
{ 0x368, std::make_tuple( 6u, 4u, std::map<char, unsigned>{{'a', 2u}, {'d', 2u}, {'c', 2u}, {'b', 3u}}, std::string( "<<!0!ad><c<0b!d>!<!0!ad>>!<!d<bcd>!<c<0b!d>!<!0!ad>>>>" ) ) },
{ 0x183, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'a', 3u}, {'d', 2u}}, std::string( "<0!<!bc<0!ab>>!<bd!<!ac!<0!ab>>>>" ) ) },
{ 0x3d8, std::make_tuple( 6u, 4u, std::map<char, unsigned>{{'d', 1u}, {'a', 3u}, {'c', 3u}, {'b', 3u}}, std::string( "<d<0!<!a!cd>!<a!bd>><!0<0!b!c><0!<!a!cd>!<a!bd>>>>" ) ) },
{ 0x7e6, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'d', 2u}, {'b', 2u}, {'c', 2u}}, std::string( "<<a!d<0!ab>><!b!c<0!ab>><!0cd>>" ) ) },
{ 0x182, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'a', 2u}, {'b', 3u}}, std::string( "<0!<cd<a!b<0b!c>>><ad!<0b!c>>>" ) ) },
{ 0x3d7, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!abc><0!b!c>!<0d!<0!b!c>>>" ) ) },
{ 0x181, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'a', 2u}, {'d', 2u}}, std::string( "<<0bc><0!a!c><!b!d!<0!ab>>>" ) ) },
{ 0x3d6, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'d', 2u}, {'a', 2u}, {'b', 2u}, {'c', 3u}}, std::string( "<<0!d<!abc>><!0ad><!b!<0!bc>!<!0ad>>>" ) ) },
{ 0x167e, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'c', 2u}, {'b', 2u}, {'d', 2u}}, std::string( "<<!ac<0b!c>><!0a<0b!c>><!b!d!<0ac>>>" ) ) },
{ 0x16a, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'d', 2u}, {'a', 2u}}, std::string( "<<b!c!d><!c!<b!c!d>!<!0!ad>><!ac<!c!<b!c!d>!<!0!ad>>>>" ) ) },
{ 0x7e, std::make_tuple( 4u, 4u, std::map<char, unsigned>{{'b', 1u}, {'d', 2u}, {'a', 3u}, {'c', 3u}}, std::string( "<!b!<!bd!<a!bc>><0!<a!bc>!<!bd!<a!bc>>>>" ) ) },
{ 0x169, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!a!<!abc><0!d<abc>>>" ) ) },
{ 0x6f, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'d', 1u}, {'a', 2u}, {'b', 2u}, {'c', 2u}}, std::string( "<!d<0a!b>!<a!bc>>" ) ) },
{ 0x69, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'d', 1u}, {'c', 2u}, {'a', 3u}, {'b', 3u}}, std::string( "<0!d<c<!ab!c>!<!abc>>>" ) ) },
{ 0x168, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'d', 1u}, {'c', 2u}, {'a', 3u}, {'b', 3u}}, std::string( "<d<!c!d!<ab!c>><0<!c!d!<ab!c>><abc>>>" ) ) },
{ 0x1, std::make_tuple( 3u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<0!<!0ab><!c!d<!0ab>>>" ) ) },
{ 0x19a, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'a', 2u}, {'b', 3u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0!a<!bcd>>!<!ad!<0!a<!bcd>>><!0!c!<!bcd>>>" ) ) },
{ 0x36b, std::make_tuple( 5u, 5u, std::map<char, unsigned>{{'b', 1u}, {'c', 2u}, {'a', 3u}, {'d', 3u}}, std::string( "<b<!b!c<0a!d>>!<b!c<d<0a!d>!<!b!c<0a!d>>>>>" ) ) },
{ 0x1697, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'d', 1u}, {'a', 2u}, {'b', 2u}, {'c', 2u}}, std::string( "<!d!<abc><ad<bcd>>>" ) ) },
{ 0x369, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'b', 1u}, {'c', 2u}, {'a', 3u}, {'d', 3u}}, std::string( "<b!<bc<!0!ad>><!b<0c!d><!0!ad>>>" ) ) },
{ 0x199, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'c', 2u}, {'a', 2u}, {'b', 2u}, {'d', 2u}}, std::string( "<<0!c!<!0ab>><a!d!<!0ab>><!0b!<!0ab>>>" ) ) },
{ 0x0, std::make_tuple( 0u, 0u, std::map<char, unsigned>{}, std::string( "0" ) ) },
{ 0x169b, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'a', 2u}, {'b', 2u}}, std::string( "<<0!cd><a!b!<0!cd>><!a<a!b!<0!cd>>!<!bcd>>>" ) ) },
{ 0x3d, std::make_tuple( 4u, 4u, std::map<char, unsigned>{{'b', 1u}, {'c', 2u}, {'d', 2u}, {'a', 3u}}, std::string( "<!b<0b!c>!<d!<0b!c><a!c<0b!c>>>>" ) ) },
{ 0x36f, std::make_tuple( 4u, 4u, std::map<char, unsigned>{{'b', 1u}, {'c', 2u}, {'a', 3u}, {'d', 2u}}, std::string( "<b<!b!c<0ac>><!d!<0ac><!b!c<0ac>>>>" ) ) },
{ 0x666, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<!a<0a!b><ab!<0cd>>>" ) ) },
{ 0x19b, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 1u}, {'d', 2u}, {'b', 2u}, {'c', 3u}}, std::string( "<a<!a!d!<0!bc>><0!a!b>>" ) ) },
{ 0x187, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'c', 2u}, {'a', 3u}, {'b', 3u}, {'d', 3u}}, std::string( "<0!<c!<abd><0d<abd>>><!0c!<abd>>>" ) ) },
{ 0x3dc, std::make_tuple( 5u, 5u, std::map<char, unsigned>{{'d', 1u}, {'b', 2u}, {'a', 3u}, {'c', 3u}}, std::string( "<d!<!bd!<0!a!<!0b!c>>><!b<!0b!c>!<!bd!<0!a!<!0b!c>>>>>" ) ) },
{ 0x667, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<0<!0!a!b>!<cd!<!0ab>>>" ) ) },
{ 0x3, std::make_tuple( 2u, 2u, std::map<char, unsigned>{{'b', 1u}, {'c', 2u}, {'d', 2u}}, std::string( "<0!b<0!c!d>>" ) ) },
{ 0x168e, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<ab!c><0!bd>!<ad!<!0c<ab!c>>>>" ) ) },
{ 0x6b6, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<!<abc><!0ab>!<!a<abc>!<0c!d>>>" ) ) },
{ 0x1eb, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<!abc>!<0ad><0b<0c!d>>>" ) ) },
{ 0x7e2, std::make_tuple( 6u, 4u, std::map<char, unsigned>{{'a', 2u}, {'c', 2u}, {'d', 3u}, {'b', 2u}}, std::string( "<!<!a<0cd>!<0d!<0cd>>>!<!0a!b><!bc!<0cd>>>" ) ) },
{ 0x17e, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'d', 2u}, {'c', 2u}}, std::string( "<<ab!d>!<bcd>!<a!c!<0d!<bcd>>>>" ) ) },
{ 0x7b6, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<abc><0c!d>!<0!a!<b!cd>>>" ) ) },
{ 0x7f, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'d', 1u}, {'c', 2u}, {'a', 2u}, {'b', 2u}}, std::string( "<!d<0!c!d>!<0ab>>" ) ) },
{ 0x19e3, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'d', 2u}, {'a', 2u}}, std::string( "<<bc<0bd>>!<abd>!<!a<0bd><bc!d>>>" ) ) },
{ 0x6b7, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'c', 1u}, {'a', 2u}, {'b', 2u}, {'d', 2u}}, std::string( "<!c<a!bc><!d!<0a!<a!bc>>!<!0a!b>>>" ) ) },
{ 0x11a, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 2u}, {'c', 2u}, {'d', 2u}, {'b', 2u}}, std::string( "<!<acd>!<b!c!d>!<!0!a!<b!c!d>>>" ) ) },
{ 0x77e, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'b', 1u}, {'c', 2u}, {'d', 2u}, {'a', 3u}}, std::string( "<b!<cd<0a<b!c!d>>>!<b<b!c!d>!<0a<b!c!d>>>>" ) ) },
{ 0x18b, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 2u}}, std::string( "<0<a!b!<0!bc>>!<ad<0!bc>>>" ) ) },
{ 0xff, std::make_tuple( 0u, 0u, std::map<char, unsigned>{{'d', 0u}}, std::string( "!d" ) ) },
{ 0x673, std::make_tuple( 5u, 5u, std::map<char, unsigned>{{'a', 2u}, {'c', 2u}, {'d', 2u}, {'b', 2u}}, std::string( "<!<a!c!d><0!b<a!c!d>>!<0d!<b!c<0!b<a!c!d>>>>>" ) ) },
{ 0x1a8, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 3u}, {'c', 3u}, {'d', 2u}}, std::string( "<<0!a!<!0bc>><!0ad><0!d<!0bc>>>" ) ) },
{ 0xf, std::make_tuple( 1u, 1u, std::map<char, unsigned>{{'c', 1u}, {'d', 1u}}, std::string( "<0!c!d>" ) ) },
{ 0x1696, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<abc><b!d<0!ad>><ac!<abc>>>" ) ) },
{ 0x36a, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'a', 2u}, {'d', 2u}, {'b', 2u}, {'c', 3u}}, std::string( "<<0a!d>!<b<0a!d><b!cd>><b<b!cd>!<b<0a!d><b!cd>>>>" ) ) },
{ 0x11b, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<a!<!0ab><!a!c!d>>" ) ) },
{ 0x18, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<a!b!c><0!b!<a!b!c>>!<!bd<a!b!c>>>" ) ) },
{ 0x117, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 2u}, {'c', 2u}, {'d', 2u}, {'b', 2u}}, std::string( "<0<!a!c!d><!b!c!<!0ad>>>" ) ) },
{ 0x1698, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'c', 2u}, {'a', 2u}, {'b', 2u}, {'d', 2u}}, std::string( "<<0c!<abc>>!<!a!b!d>!<0d<abc>>>" ) ) },
{ 0x36c, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'b', 1u}, {'d', 2u}, {'a', 3u}, {'c', 3u}}, std::string( "<b!<bd<0ac>><!b<0!cd><0ac>>>" ) ) },
{ 0x1af, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'c', 1u}, {'a', 2u}, {'d', 2u}, {'b', 3u}}, std::string( "<!c<0a!d><!ac!<0bd>>>" ) ) },
{ 0x16, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'b', 2u}, {'d', 2u}, {'a', 2u}, {'c', 2u}}, std::string( "<0<b!d<!0ac>>!<abc>>" ) ) },
{ 0x67a, std::make_tuple( 6u, 4u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'a', 2u}, {'b', 2u}}, std::string( "<!<cd<0ab>>!<!a<cd<0ab>><!0a!c>><bd<0ab>>>" ) ) },
{ 0x118, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'b', 2u}, {'a', 2u}, {'d', 2u}, {'c', 2u}}, std::string( "<<0b<0a!d>>!<bcd><!acd>>" ) ) },
{ 0x17, std::make_tuple( 2u, 2u, std::map<char, unsigned>{{'d', 1u}, {'a', 2u}, {'b', 2u}, {'c', 2u}}, std::string( "<0!d!<abc>>" ) ) },
{ 0x67b, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'d', 1u}, {'b', 2u}, {'a', 3u}, {'c', 2u}}, std::string( "<!d!<0b<a!c!d>><0!c<abd>>>" ) ) },
{ 0x119, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'d', 2u}, {'c', 2u}}, std::string( "<<!ab!d>!<!0ab>!<!abc>>" ) ) },
{ 0x169a, std::make_tuple( 6u, 4u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'d', 3u}, {'c', 2u}}, std::string( "<<0a!<a!bd>><!0a!<!c!d<a!bd>>><!a!b!c>>" ) ) },
{ 0x3c, std::make_tuple( 3u, 3u, std::map<char, unsigned>{{'b', 1u}, {'c', 2u}, {'d', 2u}}, std::string( "<b<0!bc>!<cd!<0!bc>>>" ) ) },
{ 0x36e, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'b', 1u}, {'d', 2u}, {'a', 3u}, {'c', 3u}}, std::string( "<b<!bd<0a!d>>!<d<0a!d><bcd>>>" ) ) },
{ 0x7e3, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'c', 2u}, {'a', 3u}, {'b', 2u}, {'d', 2u}}, std::string( "<<0!c<!a!bd>><!0!<!a!bd><0!c<!a!bd>>>!<b!cd>>" ) ) },
{ 0x17f, std::make_tuple( 2u, 2u, std::map<char, unsigned>{{'a', 1u}, {'d', 1u}, {'b', 2u}, {'c', 2u}}, std::string( "<!a!d!<!abc>>" ) ) },
{ 0x3d4, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'d', 2u}, {'a', 3u}, {'b', 3u}, {'c', 3u}}, std::string( "<!0<0!d<!abc>><0d!<bcd>>>" ) ) },
{ 0x6f0, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'d', 1u}, {'c', 2u}, {'a', 3u}, {'b', 3u}}, std::string( "<d<0c!d>!<d<0ab><!a!bc>>>" ) ) },
{ 0x11e, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!ab<!bcd>><0a!<!bcd>>!<bcd>>" ) ) },
{ 0x37c, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'d', 2u}, {'a', 3u}}, std::string( "<<!bcd><!c!d!<0ab>><0b!d>>" ) ) },
{ 0x12c, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'d', 2u}, {'a', 2u}}, std::string( "<!<bcd><0<abc>!<bcd>><!abd>>" ) ) },
{ 0x19e6, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'d', 2u}, {'c', 3u}}, std::string( "<<ab!d><!bd<0a!c>><!a!d!<0a!c>>>" ) ) },
{ 0x1ef, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'b', 1u}, {'c', 2u}, {'a', 3u}, {'d', 2u}}, std::string( "<b!<bc!<0a!b>>!<bd<0a!b>>>" ) ) },
{ 0x16a9, std::make_tuple( 6u, 4u, std::map<char, unsigned>{{'a', 2u}, {'d', 2u}, {'b', 3u}, {'c', 3u}}, std::string( "<!<!ad<!0bc>><!a<!0bc>!<!ad<!0bc>>><0d!<bc!d>>>" ) ) },
{ 0x37d, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'b', 2u}, {'a', 2u}}, std::string( "<<0c!d>!<bcd>!<ac!<!0bd>>>" ) ) },
{ 0x6b, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'d', 1u}, {'c', 2u}, {'a', 2u}, {'b', 2u}}, std::string( "<!d<0c!<a!bc>><a!b!<a!bc>>>" ) ) },
{ 0x12d, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'c', 2u}, {'b', 2u}, {'d', 2u}}, std::string( "<!<!0!a!c>!<a!bc><!b!c!d>>" ) ) },
{ 0x12f, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'c', 1u}, {'a', 2u}, {'d', 2u}, {'b', 2u}}, std::string( "<!c<0a!d><!a!b!d>>" ) ) },
{ 0x1fe, std::make_tuple( 5u, 5u, std::map<char, unsigned>{{'a', 2u}, {'c', 2u}, {'d', 2u}, {'b', 3u}}, std::string( "<<!0ac><d!<!0ac><0b!<!0ac>>>!<d<0b!<!0ac>>!<d!<!0ac><0b!<!0ac>>>>>" ) ) },
{ 0x19, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'d', 2u}, {'c', 3u}}, std::string( "<!a<0ab><!b!d!<!0!ac>>>" ) ) },
{ 0x3fc, std::make_tuple( 4u, 4u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0!b!c>!<0!d<0!b!c>><0!d!<0!d<0!b!c>>>>" ) ) },
{ 0x179a, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!abc>!<c!d!<0a!d>><!0!b<0a!d>>>" ) ) },
{ 0x13c, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'d', 2u}, {'b', 2u}, {'c', 3u}}, std::string( "<!a<!d!<!0b!c><b!cd>><a!b<b!cd>>>" ) ) },
{ 0x16b, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!a!<!abc>!<!ad!<0bc>>>" ) ) },
{ 0x6f2, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<abc><0c!d><!0a<bd<0c!d>>>>" ) ) },
{ 0x3c0, std::make_tuple( 4u, 4u, std::map<char, unsigned>{{'c', 2u}, {'b', 3u}, {'d', 3u}}, std::string( "<0<!0!c!<!bcd>><c<!bcd><!0!c!<!bcd>>>>" ) ) },
{ 0x33c, std::make_tuple( 4u, 4u, std::map<char, unsigned>{{'c', 1u}, {'b', 2u}, {'d', 2u}}, std::string( "<c!<bcd><!cd<0b!<bcd>>>>" ) ) },
{ 0x1668, std::make_tuple( 6u, 6u, std::map<char, unsigned>{{'b', 3u}, {'c', 3u}, {'d', 3u}, {'a', 3u}}, std::string( "<0<!0!<!b!c!d><ab<cd<!b!c!d>>>><<!b!c!d>!<ab<cd<!b!c!d>>><!0!<!b!c!d><ab<cd<!b!c!d>>>>>>" ) ) },
{ 0x669, std::make_tuple( 6u, 4u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'a', 2u}, {'b', 3u}}, std::string( "<0!<0cd>!<!a<ab<0!c!d>>!<!ab<0!c!d>>>>" ) ) },
{ 0x19e, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'d', 1u}, {'a', 2u}, {'c', 2u}, {'b', 3u}}, std::string( "<!d<a!c!<0!b!d>>!<!0a!<!bcd>>>" ) ) },
{ 0x13d, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'d', 2u}, {'a', 2u}}, std::string( "<0!<bcd>!<0a!<abc>>>" ) ) },
{ 0x6, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<0!<abc><ab!d>>" ) ) },
{ 0x19f, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'d', 1u}, {'a', 2u}, {'b', 2u}, {'c', 2u}}, std::string( "<!d!<!0ab>!<!bc<0!a!d>>>" ) ) },
{ 0x13e, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'b', 2u}, {'d', 2u}, {'a', 3u}, {'c', 2u}}, std::string( "<<!b!d!<a!bc>><d<a!bc><!b!d!<a!bc>>><0b!c>>" ) ) },
{ 0x776, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'a', 2u}, {'b', 2u}}, std::string( "<!<0cd><0!ab><!bc<a!cd>>>" ) ) },
{ 0x13f, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!a<!b!c!d><0a!d>>" ) ) },
{ 0x16e, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'a', 2u}, {'c', 2u}, {'d', 2u}, {'b', 2u}}, std::string( "<!<acd><a!bd><a!d!<!0!b<acd>>>>" ) ) },
{ 0x3c3, std::make_tuple( 4u, 4u, std::map<char, unsigned>{{'c', 1u}, {'b', 2u}, {'d', 3u}}, std::string( "<c!<!bc<0bd>><0!b!<!bc<0bd>>>>" ) ) },
{ 0x3cc3, std::make_tuple( 3u, 3u, std::map<char, unsigned>{{'d', 1u}, {'b', 2u}, {'c', 2u}}, std::string( "<d<!bc!d>!<!bc!<!bc!d>>>" ) ) },
{ 0x33f, std::make_tuple( 1u, 1u, std::map<char, unsigned>{{'b', 1u}, {'c', 1u}, {'d', 1u}}, std::string( "<!b!c!d>" ) ) },
{ 0x166b, std::make_tuple( 6u, 4u, std::map<char, unsigned>{{'c', 2u}, {'b', 3u}, {'d', 3u}, {'a', 2u}}, std::string( "<!0<!c!<b!cd><0!a<bcd>>><a!<bcd><0!a<bcd>>>>" ) ) },
{ 0x16f, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!a<a!b!c><0!d<ab!d>>>" ) ) },
{ 0x11f, std::make_tuple( 2u, 2u, std::map<char, unsigned>{{'c', 1u}, {'d', 1u}, {'a', 2u}, {'b', 2u}}, std::string( "<!c!d<0!a!b>>" ) ) },
{ 0x35e, std::make_tuple( 6u, 5u, std::map<char, unsigned>{{'b', 2u}, {'d', 2u}, {'c', 2u}, {'a', 2u}}, std::string( "<!<bd<0cd>><a!cd><0!a<bc!<bd<0cd>>>>>" ) ) },
{ 0x690, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'a', 2u}, {'b', 2u}}, std::string( "<<0c!d>!<abc><abd>>" ) ) },
{ 0x180, std::make_tuple( 5u, 5u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'a', 3u}, {'b', 3u}}, std::string( "<<!c!d<ab!c>><!0c!<!c!d<ab!c>>><0!c<!0c!<!c!d<ab!c>>>>>" ) ) },
{ 0x3d5, std::make_tuple( 5u, 5u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'b', 3u}, {'a', 2u}}, std::string( "<0!<cd<0b!c>><!a!<0b!c>!<!b!d<cd<0b!c>>>>>" ) ) },
{ 0x6f1, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'a', 2u}, {'b', 2u}}, std::string( "<<0c!d>!<ab!d><!0!d<ab!c>>>" ) ) },
{ 0x6b0, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'a', 2u}, {'b', 2u}}, std::string( "<<0c!d><abd><!b!c!<0a!<0c!d>>>>" ) ) },
{ 0x37e, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'a', 3u}, {'d', 2u}}, std::string( "<<!bc<0a!d>>!<!b!d<!bc<0a!d>>>!<bd<!bc<0a!d>>>>" ) ) },
{ 0x3c1, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'b', 1u}, {'c', 3u}, {'d', 3u}, {'a', 3u}}, std::string( "<b<!0!b!<b!cd>><0!b!<ac!<b!cd>>>>" ) ) },
{ 0x3c5, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'b', 2u}, {'d', 2u}, {'c', 2u}, {'a', 3u}}, std::string( "<<0b!d><0!b!c><!0d!<0a!c>>>" ) ) },
{ 0x3c6, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'b', 1u}, {'a', 3u}, {'c', 3u}, {'d', 3u}}, std::string( "<!b<0b!<a!cd>><b<a!cd><!0!c!d>>>" ) ) },
{ 0x1a9, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'b', 2u}, {'a', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0!b<!ab!c>><0a!d><!0c<!ab!c>>>" ) ) },
{ 0x166e, std::make_tuple( 6u, 5u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<<0!a!<!b!c!d>>!<0b<cd!<0!a!<!b!c!d>>>><ab<!b!c!d>>>" ) ) },
{ 0x3cf, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'b', 2u}, {'d', 2u}, {'c', 2u}}, std::string( "<0<!0!b!d><!0b!c>>" ) ) },
{ 0x3d9, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'d', 2u}, {'b', 2u}, {'c', 2u}}, std::string( "<!<ad!<0ab>><!bc!<0ab>><!0<0!cd><0ab>>>" ) ) },
{ 0x7bc, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'d', 2u}, {'a', 3u}, {'b', 3u}, {'c', 2u}}, std::string( "<<d<0!ab><0!b!c>>!<c<0!ab><0!b!c>>!<!0d<0!b!c>>>" ) ) },
{ 0x1bc, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'d', 2u}, {'a', 3u}}, std::string( "<<bc!d><!0!b!<!ad<bc!d>>><0!c<!ad<bc!d>>>>" ) ) },
{ 0x1681, std::make_tuple( 6u, 5u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'a', 3u}, {'b', 3u}}, std::string( "<<!c!d!<!a!b<ab!d>>><c!<ab!d><!c!d!<!a!b<ab!d>>>><0d<!a!b<ab!d>>>>" ) ) },
{ 0x3dd, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'c', 2u}, {'d', 2u}, {'b', 3u}}, std::string( "<!a<!c!d!<0b!c>><ad<0ab>>>" ) ) },
{ 0x3c7, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'d', 3u}, {'a', 4u}}, std::string( "<0!<0!bc><!b!<0!bc><0!d<!0!ac>>>>" ) ) },
{ 0x6f9, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'d', 1u}, {'c', 2u}, {'a', 3u}, {'b', 3u}}, std::string( "<!d<!0c<!a!b!<!a!b!d>>>!<!0c<!a!b!d>>>" ) ) },
{ 0x660, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<0<!a!b!<0cd>><ab<!0cd>>>" ) ) },
{ 0x196, std::make_tuple( 6u, 5u, std::map<char, unsigned>{{'a', 2u}, {'d', 2u}, {'c', 2u}, {'b', 2u}}, std::string( "<<0a!d><!ac<!0bd>><!b!c<0!d<!ac<!0bd>>>>>" ) ) },
{ 0x661, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'a', 2u}, {'b', 2u}}, std::string( "<0!<cd<0!a!b>>!<ab<0!c!d>>>" ) ) },
{ 0x197, std::make_tuple( 6u, 6u, std::map<char, unsigned>{{'b', 2u}, {'a', 3u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<b<!0a!b><0!a<!0a!b>>>!<cd!<b<!0a!b><0!a<!0a!b>>>><c<0!a<!0a!b>>!<cd!<b<!0a!b><0!a<!0a!b>>>>>>" ) ) },
{ 0x662, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<0<!a!b!<0cd>><a!<0cd><bcd>>>" ) ) },
{ 0x7f0, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'a', 3u}, {'b', 3u}}, std::string( "<0<cd<!0!c!d>>!<d!<!0!c!d><0ab>>>" ) ) },
{ 0x198, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'b', 2u}, {'d', 2u}, {'c', 3u}, {'a', 2u}}, std::string( "<!<!b!d<0!bc>><0!a!b>!<!ad!<0!bc>>>" ) ) },
{ 0x663, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'b', 2u}, {'a', 3u}}, std::string( "<<!0!c!d><0!b!<!acd>><b<!acd><0!b!<!acd>>>>" ) ) },
{ 0x7f1, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'a', 3u}, {'b', 3u}}, std::string( "<0!<0cd><!0c!<ab!d>>>" ) ) },
{ 0x7, std::make_tuple( 3u, 3u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'a', 2u}, {'b', 2u}}, std::string( "<0<0!c!d><!a!b<0!c!d>>>" ) ) },
{ 0x66b, std::make_tuple( 6u, 5u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'a', 2u}, {'b', 2u}}, std::string( "<!<cd<0ab>>!<!ab<cd!<cd<0ab>>>><0b<cd!<cd<0ab>>>>>" ) ) },
{ 0x33d, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'b', 2u}, {'a', 3u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0!b!<a!cd>><!b!c!d><bd<!b!c!d>>>" ) ) },
{ 0x1669, std::make_tuple( 7u, 6u, std::map<char, unsigned>{{'a', 3u}, {'b', 2u}, {'d', 3u}, {'c', 1u}}, std::string( "<<<!0<abd><bc<ad!<abd>>>>!b!<ad!<abd>>>!<!<!0<abd><bc<ad!<abd>>>>!0<abd>>!c>" ) ) },
{ 0x66f, std::make_tuple( 4u, 4u, std::map<char, unsigned>{{'c', 1u}, {'d', 1u}, {'a', 3u}, {'b', 3u}}, std::string( "<!c!d<0!<0ab>!<!a!b<0ab>>>>" ) ) },
{ 0x1ad, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'c', 2u}, {'d', 2u}, {'b', 3u}}, std::string( "<<0!a!c>!<cd<0b!c>><ac<0b!c>>>" ) ) },
{ 0x678, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'d', 2u}, {'c', 2u}}, std::string( "<<abd><0c!<abd>>!<cd<0ab>>>" ) ) },
{ 0x1ae, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'a', 2u}, {'d', 2u}, {'b', 2u}, {'c', 2u}}, std::string( "<<0a!d><!b!c!d><!ab!<0!d<!b!c!d>>>>" ) ) },
{ 0x679, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'d', 1u}, {'c', 2u}, {'a', 2u}, {'b', 2u}}, std::string( "<!d<0!c<abd>><!a!b!<0!c!<abd>>>>" ) ) },
{ 0x67e, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'c', 1u}, {'b', 2u}, {'a', 3u}, {'d', 2u}}, std::string( "<c<b!c<0a!c>>!<cd<0ab>>>" ) ) },
{ 0x168b, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'d', 2u}, {'c', 2u}}, std::string( "<<a!b!d>!<c<0bc><a!b!d>><bc<0!ad>>>" ) ) },
{ 0x35f, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'d', 1u}, {'b', 2u}, {'c', 2u}, {'a', 2u}}, std::string( "<!d<0!b!c>!<0ac>>" ) ) },
{ 0x691, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'d', 2u}, {'c', 2u}}, std::string( "<!<!abd><!ab!<b!cd>><0!cd>>" ) ) },
{ 0x696, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<a!<abc>!<a!b!<0c!d>>>" ) ) },
{ 0x697, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<abc><!ab!d><ac<0a!b>>>" ) ) },
{ 0x6b1, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'a', 2u}, {'b', 2u}}, std::string( "<<0c!d>!<ab!d><a!c<!0b!d>>>" ) ) },
{ 0x778, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'d', 1u}, {'c', 2u}, {'a', 3u}, {'b', 3u}}, std::string( "<!d<!cd!<!0!a!b>><d<!0!a!b><0c<!0!a!b>>>>" ) ) },
{ 0x16ac, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'b', 2u}, {'a', 3u}, {'d', 3u}, {'c', 3u}}, std::string( "<0<!b<!0!a!d><ab!c>>!<0!b!<acd>>>" ) ) },
{ 0x6b2, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'a', 2u}, {'b', 2u}}, std::string( "<!<0cd><a!bc>!<!0a!<abd>>>" ) ) },
{ 0x779, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0ab>!<cd<0ab>>!<ab!<!0cd>>>" ) ) },
{ 0x16ad, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'b', 2u}, {'d', 2u}, {'a', 2u}, {'c', 2u}}, std::string( "<<0!bd><a!c!<0!bd>><!a!d<!0bc>>>" ) ) },
{ 0x1e8, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'a', 2u}, {'d', 2u}}, std::string( "<!<bc<!0ad>><!a<!0ad><bc<!0ad>>><0!d<bc<!0ad>>>>" ) ) },
{ 0x6b3, std::make_tuple( 6u, 6u, std::map<char, unsigned>{{'d', 1u}, {'b', 2u}, {'c', 3u}, {'a', 3u}}, std::string( "<!d<bd<!c<0bc><ad<0bc>>>>!<b<ad<0bc>>!<bd<!c<0bc><ad<0bc>>>>>>" ) ) },
{ 0x116, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'c', 2u}, {'d', 2u}, {'b', 3u}}, std::string( "<0!<acd><!<bcd><a!bd><!abc>>>" ) ) },
{ 0x77a, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'c', 1u}, {'d', 2u}, {'a', 3u}, {'b', 3u}}, std::string( "<c!<cd<0ab>><0<!0ad>!<cd<0ab>>>>" ) ) },
{ 0x1e9, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'c', 2u}, {'a', 2u}, {'b', 2u}, {'d', 2u}}, std::string( "<<0!c!<ab!c>>!<0d!<0!c!<ab!c>>><ab!<ab!c>>>" ) ) },
{ 0x6b4, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'b', 2u}, {'a', 2u}}, std::string( "<!<0!c!d>!<bd!<ab!c>>!<!0a!<ab!c>>>" ) ) },
{ 0x19e1, std::make_tuple( 6u, 4u, std::map<char, unsigned>{{'a', 2u}, {'c', 2u}, {'d', 2u}, {'b', 2u}}, std::string( "<<acd>!<b<0a!b><!0!cd>>!<!bc<b<0a!b><!0!cd>>>>" ) ) },
{ 0x1ea, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'d', 2u}, {'c', 2u}, {'b', 3u}}, std::string( "<<0a!d>!<0!c<b!c!d>>!<ac!<b!c!d>>>" ) ) },
{ 0x6b5, std::make_tuple( 6u, 4u, std::map<char, unsigned>{{'c', 2u}, {'a', 2u}, {'d', 2u}, {'b', 2u}}, std::string( "<<c<0ad><a!b!<0ad>>>!<!bd<0ad>><!a!c<0ad>>>" ) ) },
{ 0x1ee, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'d', 2u}, {'c', 3u}}, std::string( "<!<abd><0a!d><!0b!<c!d!<0a!d>>>>" ) ) },
{ 0x6b9, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'d', 2u}, {'c', 2u}}, std::string( "<<a!b!d><0!cd><b!d<!0!ac>>>" ) ) },
{ 0x6bd, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'c', 2u}, {'d', 2u}, {'b', 2u}}, std::string( "<<a!c!<0ad>><!bc<0ad>><!ab!d>>" ) ) },
{ 0x6f6, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<0!a!b><!a!b!c><0c!d>>" ) ) },
{ 0x7b0, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'c', 1u}, {'d', 2u}, {'a', 3u}, {'b', 3u}}, std::string( "<!c!<!0!cd><!<!0!cd>!<ab!d><!0ad>>>" ) ) },
{ 0x7b1, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'d', 1u}, {'c', 2u}, {'b', 2u}, {'a', 3u}}, std::string( "<!d<0!cd>!<b<0a!c>!<ab<0!cd>>>>" ) ) },
{ 0x7b4, std::make_tuple( 6u, 4u, std::map<char, unsigned>{{'d', 2u}, {'a', 3u}, {'b', 3u}, {'c', 2u}}, std::string( "<<0d<a!b!d>><!c!<0ad><a!b!d>>!<!c<a!b!d><0d<a!b!d>>>>" ) ) },
{ 0x7b5, std::make_tuple( 5u, 5u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'d', 2u}, {'c', 2u}}, std::string( "<<!a!bd>!<cd<0!a!<!a!bd>>><c<0!a!<!a!bd>>!<cd<0!a!<!a!bd>>>>>" ) ) },
{ 0x7f2, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'d', 1u}, {'c', 2u}, {'a', 3u}, {'b', 3u}}, std::string( "<!d!<0!c!d><0!<!ac!d>!<abc>>>" ) ) },
{ 0x7f8, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'d', 1u}, {'a', 3u}, {'b', 3u}, {'c', 2u}}, std::string( "<!d<0!<abc>!<c!d!<abc>>>!<0!c<c!d!<abc>>>>" ) ) },
{ 0x18f, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'a', 2u}, {'d', 2u}}, std::string( "<0!<!bc!<!0a!b>>!<ad!<!0a!b>>>" ) ) },
{ 0xff0, std::make_tuple( 3u, 3u, std::map<char, unsigned>{{'d', 1u}, {'c', 2u}}, std::string( "<d<0c!d><!0!c<0c!d>>>" ) ) },
{ 0x166a, std::make_tuple( 6u, 4u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'d', 2u}, {'c', 3u}}, std::string( "<!<abd><0<!a!c<!b!c!d>><abd>><!0a!<!b!c!d>>>" ) ) },
{ 0x35b, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'a', 2u}, {'d', 2u}}, std::string( "<!<0b!c><0a!c><!a!c!d>>" ) ) },
{ 0x1687, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'c', 1u}, {'b', 2u}, {'d', 2u}, {'a', 2u}}, std::string( "<!c!<bd!<acd>><!ab<0c<acd>>>>" ) ) },
{ 0x1689, std::make_tuple( 6u, 6u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'d', 2u}, {'c', 3u}}, std::string( "<<abd><!d!<abd><!0c<ab!<abd>>>><d!<!0c<ab!<abd>>><!d!<abd><!0c<ab!<abd>>>>>>" ) ) },
{ 0x36d, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'c', 1u}, {'b', 2u}, {'a', 3u}, {'d', 2u}}, std::string( "<!c!<b!c<a!d!<!0!a!c>>><b!d!<!0!a!c>>>" ) ) },
{ 0x69f, std::make_tuple( 3u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<a<!a!b!c>!<!bd!<!a!b!c>>>" ) ) },
{ 0x1699, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}, {'b', 2u}, {'a', 2u}}, std::string( "<!<0!cd><b<a!b!d><0!cd>><!a!b<b<a!b!d><0!cd>>>>" ) ) }
};

const std::unordered_map<unsigned, std::tuple<unsigned, unsigned, std::map<char, unsigned>, std::string>> mig_functional_hashing_constants::min_depth_mig_sizes = {
{ 0x3cc3, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'b', 1u}, {'c', 2u}, {'d', 2u}}, std::string( "<b<!bc!d>!<bc!d>>" ) ) },
{ 0x1bd8, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<<!acd>!<0<abd><!acd>><0<abd>!<!acd>>>" ) ) },
{ 0x19e3, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<<0!a!b><a!d!<!bcd>><d!<0b!c>!<0!a!b>>>" ) ) },
{ 0x19e1, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0c!d><a<!b!cd><!0a!b>><!ab<!b!cd>>>" ) ) },
{ 0x17e8, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 3u}, {'c', 3u}, {'d', 3u}}, std::string( "<!d<!0d<abc>><0d!<abc>>>" ) ) },
{ 0x179a, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!abc><!b!d<!0ad>><0!c<!0ad>>>" ) ) },
{ 0x178e, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0!bd>!<!a!bc>!<0ad>>" ) ) },
{ 0x16e9, std::make_tuple( 6u, 4u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<<0!a!b>!<d<!0c<0ab>><0!a!b>>!<!d!<!0c<0ab>><0!a!b>>>" ) ) },
{ 0x16bc, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0!d!<0!b!c>><ad!<0!b!c>>!<abc>>" ) ) },
{ 0x16ad, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!0bc>!<!ad<!0bc>>!<ac<!0b!d>>>" ) ) },
{ 0x16ac, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<<0a!d><!0b<acd>><0!<abc>!<0a!d>>>" ) ) },
{ 0x16a9, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<<a!d!<!0bc>><0!a<!b!cd>><ad<!0bc>>>" ) ) },
{ 0x169e, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<abc><b!<abc><!0ac>><0a!d>>" ) ) },
{ 0x169b, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<a!b<!0c!d>>!<!bcd>!<a<!0c!d>!<!bcd>>>" ) ) },
{ 0x169a, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<<a!bc><!a!<0!cd><b!c!d>><a<0!cd>!<a!bc>>>" ) ) },
{ 0x1699, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 2u}}, std::string( "<<!ab!<0!cd>><!a!b<0!cd>>!<!abd>>" ) ) },
{ 0x1687, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!abc><a!c!d><!b!c<0!ad>>>" ) ) },
{ 0x167e, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!ac<0b!c>><a!b<0b!c>>!<0d<abc>>>" ) ) },
{ 0x166e, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<<a!b<0cd>>!<0a<0cd>><0b!<acd>>>" ) ) },
{ 0x3cf, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'b', 1u}, {'c', 2u}, {'d', 2u}}, std::string( "<!c<0bc>!<0bd>>" ) ) },
{ 0x166b, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 3u}, {'c', 2u}, {'d', 3u}}, std::string( "<!<0a<bcd>><!c<bcd><!bc!d>><0a!<bcd>>>" ) ) },
{ 0x1be, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0a!d>!<bcd><!ab<!0cd>>>" ) ) },
{ 0x7f2, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<<0c!d><a!cd><!0<0c!d>!<abc>>>" ) ) },
{ 0x7e9, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<!d<0!c!<ab!d>><!0d<abc>>>" ) ) },
{ 0x6996, std::make_tuple( 6u, 4u, std::map<char, unsigned>{{'a', 2u}, {'b', 3u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!c!<0a!c><0ac>><b!d!<!c!<0a!c><0ac>>><!bd!<!c!<0a!c><0ac>>>>" ) ) },
{ 0x1af, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<!0ac><0a!d>!<0bd>>" ) ) },
{ 0x33c, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<bcd>!<!0b!d><bc!d>>" ) ) },
{ 0x7e3, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<ab!d>!<!0c<ab!d>>!<0<ab!d><b!cd>>>" ) ) },
{ 0x1681, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0d!<abc>>!<b!c<!acd>><!ab!<!acd>>>" ) ) },
{ 0x1ae, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<b!cd><0a!<b!cd>>!<ad<0!ab>>>" ) ) },
{ 0x7e2, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<!<bc!<!a!bd>>!<0<!a!bd><!bc!d>><0!<!a!bd><!bc!d>>>" ) ) },
{ 0x1ad, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 3u}, {'c', 2u}, {'d', 3u}}, std::string( "<!a<0a!<!b!cd>>!<!ac<0bd>>>" ) ) },
{ 0x7e1, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<<0c!d><!0!c<ab!d>><0!c!<ab!d>>>" ) ) },
{ 0x1f, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!d!<ab!d><0!c!d>>" ) ) },
{ 0x1ac, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<bcd><0a<!ac!d>><b!<!ac!d>!<0a!b>>>" ) ) },
{ 0x7e0, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<<0c!d><0d<!a!bd>>!<0c<!a!bd>>>" ) ) },
{ 0x7bc, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 3u}, {'c', 3u}, {'d', 2u}}, std::string( "<!d!<!d<0!ab><0!b!c>><!c<0!ab>!<!0b!d>>>" ) ) },
{ 0x3dc, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<!<0bd><b!cd><0!d<!abc>>>" ) ) },
{ 0x6f6, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!abc>!<0cd><0a!b>>" ) ) },
{ 0x6bd, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<b!c!<!0b!d>>!<!abd><!ac<!0b!d>>>" ) ) },
{ 0x77e, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<!c!<!0!<!0cd><ab!<!0cd>>><c!d<ab!<!0cd>>>>" ) ) },
{ 0x6b9, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<!abd><0!cd><b!d!<0a!c>>>" ) ) },
{ 0x6b7, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!b<ab!c><!d<0!ab><!0!ac>>>" ) ) },
{ 0x6b6, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 2u}}, std::string( "<!<0!b!<0c!d>>!<abc><a!b<0c!d>>>" ) ) },
{ 0x77a, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<<!0ac><0d!<!0ac>>!<cd<0ab>>>" ) ) },
{ 0x6b5, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<<0!cd><a!d!<bcd>><!d<bcd><!0!ac>>>" ) ) },
{ 0xff0, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'c', 2u}, {'d', 2u}}, std::string( "<0<!0cd>!<0cd>>" ) ) },
{ 0x779, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!a!bd>!<cd<0ab>>!<!c!<0ab><!a!bd>>>" ) ) },
{ 0x6b4, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!0cd><0b!<abc>><a!d!<abc>>>" ) ) },
{ 0x778, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0ab>!<cd<0ab>><0!<0ab>!<0!c!d>>>" ) ) },
{ 0x7f, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!d!<!0ad><a!b!c>>" ) ) },
{ 0x6b3, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<ab!c><!d<0bc>!<ab!c>>!<b<0bc><ab!d>>>" ) ) },
{ 0x7e, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<bc!d><0a!c>!<abd>>" ) ) },
{ 0x6b2, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0c!d><ab!c>!<ab<0b!d>>>" ) ) },
{ 0x776, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0!ab>!<0cd><!bc<a!bd>>>" ) ) },
{ 0x6b1, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!a!bd><0c!d>!<!ac!<!0b!d>>>" ) ) },
{ 0x6b0, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0c!d><ab!c><!bd!<0a<ab!c>>>>" ) ) },
{ 0x37c, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<!bd!<0!bc>><!bd<0!bc>>!<ac<0!bc>>>" ) ) },
{ 0x1ef, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<abd><0b!d><!0a!c>>" ) ) },
{ 0x696, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<ab!c>!<abc><0c!d>>" ) ) },
{ 0x35e, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<!a<acd>!<!0bd>><0!ac>!<bcd>>" ) ) },
{ 0x678, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<abd><0c!<abd>>!<cd<0ab>>>" ) ) },
{ 0x676, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!ac<0!ab>><a!b<0!ab>>!<0cd>>" ) ) },
{ 0x669, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 3u}, {'b', 3u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<!0!<!0cd><0cd>><a!b!<!0cd>><!ab!<!0cd>>>" ) ) },
{ 0x1bc, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 3u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<!0b<a!c!d>><bc!d><!0!c<a!c!d>>>" ) ) },
{ 0x663, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!acd><0!b!<!acd>>!<cd<0!a!b>>>" ) ) },
{ 0x7f0, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<<0c!d><!0cd>!<cd<0ab>>>" ) ) },
{ 0x1bf, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!d<!0a!b><0!a!c>>" ) ) },
{ 0x666, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0a!b><0!ab>!<0cd>>" ) ) },
{ 0x661, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<0<!a!b<!0cd>><!c!d<!0ab>>>" ) ) },
{ 0x1689, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 2u}}, std::string( "<!<a!b<0!cd>><!bd<0!cd>><a!d!<!0bc>>>" ) ) },
{ 0x660, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<0<cd!<0ab>><!c!d<!0ab>>>" ) ) },
{ 0x182, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<bd!<0a!c>>!<!0!ad>!<!0bc>>" ) ) },
{ 0x7b6, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<!0!cd>!<abc><!0a<b!cd>>>" ) ) },
{ 0x3d7, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!abc><0!b!c>!<0d<!abc>>>" ) ) },
{ 0x6f1, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0c!d>!<0d<!a!bc>><!a!bd>>" ) ) },
{ 0x3dd, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<b!c<!0bd>><!b!d<!0bd>><0!a!d>>" ) ) },
{ 0x180, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 3u}, {'c', 3u}, {'d', 2u}}, std::string( "<!<!0!d<bcd>><0a<bcd>>!<0ad>>" ) ) },
{ 0x7b4, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<<0!bd>!<c<0!ab><0!bd>><c<0!ab>!<0cd>>>" ) ) },
{ 0x3db, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<ab<0!b!c>>!<a!c!<0!b!c>><!0!d<0!b!c>>>" ) ) },
{ 0x7b0, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<d<0c!d><!c<a!b!d>!<0ad>>>" ) ) },
{ 0x3d4, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<d!<cd<0bd>><0!d<!abc>>>" ) ) },
{ 0x3c7, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 2u}}, std::string( "<<0!b!c>!<0b<0a!c>><0b!d>>" ) ) },
{ 0x3c6, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!ac!d><0!b!<!ac!d>><b!<!ac!d>!<0cd>>>" ) ) },
{ 0x3c5, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<0bd><!a!c<0ad>><0bc>>" ) ) },
{ 0x3c3, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<0cd>!<!0bc><0bc>>" ) ) },
{ 0x3c1, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 3u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0!b<!a!cd>><0bc>!<0cd>>" ) ) },
{ 0x3c0, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<0cd><0!bd><0bc>>" ) ) },
{ 0x1798, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 3u}, {'c', 2u}, {'d', 3u}}, std::string( "<!0<0a<0b!d>><d<0c!d>!<abc>>>" ) ) },
{ 0x36f, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 3u}, {'d', 2u}}, std::string( "<b!<bd<0a!d>>!<bc!<0a!d>>>" ) ) },
{ 0x3fc, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0b!d>!<bcd><!0cd>>" ) ) },
{ 0x1698, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<0d<abc>>!<!0!c<abc>><abd>>" ) ) },
{ 0x177e, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 3u}, {'c', 3u}, {'d', 2u}}, std::string( "<<!0!b<!ab!c>>!<!bd<!ab!c>><0d!<abc>>>" ) ) },
{ 0x66f, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 1u}, {'c', 2u}, {'d', 3u}}, std::string( "<!c!d<!a<!0ab><0a!b>>>" ) ) },
{ 0x35b, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<0ac><0!b!c><ac!d>>" ) ) },
{ 0x1697, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<abc><!ab!d>!<!ab!c>>" ) ) },
{ 0x66b, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<!bcd><0a!<bcd>><!b!<0ab><bcd>>>" ) ) },
{ 0x7f8, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<<!0cd>!<cd<0ab>><0!d<0ab>>>" ) ) },
{ 0x35a, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<!<acd><0d!<bcd>><!0ac>>" ) ) },
{ 0x1696, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<!<abc><a!bc><!ab<0c!d>>>" ) ) },
{ 0x3f, std::make_tuple( 2u, 2u, std::map<char, unsigned>{{'b', 1u}, {'c', 2u}, {'d', 2u}}, std::string( "<0!d!<0bc>>" ) ) },
{ 0x673, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<!<0d<!a!bc>>!<a!d!<!a!bc>><0!b<a!d!<!a!bc>>>>" ) ) },
{ 0x359, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!a!d<0ab>><!cd<0ab>><!bc!<0ab>>>" ) ) },
{ 0x672, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<0cd><0a!b><!ac<0bd>>>" ) ) },
{ 0x358, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 3u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0c!<acd>>!<b<acd>!<0a!c>><!0bd>>" ) ) },
{ 0x3d, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!ac!d>!<bcd>!<!0!bc>>" ) ) },
{ 0x357, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!0!<!0ad><0!b!c>>" ) ) },
{ 0x3c, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<0<bc!d>!<0bc>>" ) ) },
{ 0x356, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 3u}, {'c', 3u}, {'d', 3u}}, std::string( "<c!<c<0b!c><!0ad>><!c<0b!c><!0ad>>>" ) ) },
{ 0x7e6, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!b!c<0!ab>><!0cd><a!d<0!ab>>>" ) ) },
{ 0x33f, std::make_tuple( 2u, 2u, std::map<char, unsigned>{{'b', 1u}, {'c', 1u}, {'d', 2u}}, std::string( "<!b!c<bc!d>>" ) ) },
{ 0x33d, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<!<bcd><0c!<bcd>><!0d!<a!bd>>>" ) ) },
{ 0x690, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0c!d>!<abc><abd>>" ) ) },
{ 0x1e9, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0!a!c>!<!0d!<abc>><!0!b<abc>>>" ) ) },
{ 0x1686, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<bcd>!<abc>!<!a<!0!bd><abc>>>" ) ) },
{ 0x7f1, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0c!d>!<0cd><!a!bd>>" ) ) },
{ 0x1bd, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<bc!d><0!a!b><!0!c<a!c!d>>>" ) ) },
{ 0x1683, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<b<!bc!<!abd>><!b!c<0!ad>>>" ) ) },
{ 0x1e, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 3u}, {'c', 3u}, {'d', 2u}}, std::string( "<!c<0c<0!a!b>>!<!cd<0!a!b>>>" ) ) },
{ 0x1ab, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<0!ab><0!a!c><0a!d>>" ) ) },
{ 0x1aa, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 2u}}, std::string( "<<!ab<!0a!c>>!<!0!ad><!bd!<!0!ad>>>" ) ) },
{ 0x1a9, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 2u}}, std::string( "<!<ab<!0b!c>>!<a!b!<!0b!c>><0a!d>>" ) ) },
{ 0x1b, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<0!<acd><a!b!d>>" ) ) },
{ 0x1a8, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 3u}, {'c', 3u}, {'d', 2u}}, std::string( "<<0d!<!0bc>>!<0ad><0a<!0bc>>>" ) ) },
{ 0xf, std::make_tuple( 1u, 1u, std::map<char, unsigned>{{'c', 1u}, {'d', 1u}}, std::string( "<0!c!d>" ) ) },
{ 0x199, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<<0ab><!a!d<!0b!c>>!<!0ab>>" ) ) },
{ 0x198, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 2u}}, std::string( "<<a!d!<!0a!c>><bd<!0a!c>>!<!0ab>>" ) ) },
{ 0x197, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<0bd>!<ac!<0!b!d>><0a!<a!b!c>>>" ) ) },
{ 0x6f9, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<!<!0!ac><!d<0b!c><!0!ac>>!<!d<0b!c>!<!0!ac>>>" ) ) },
{ 0x196, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!ac<!0bd>>!<bc!<0!a!d>><0a!d>>" ) ) },
{ 0x3d8, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 3u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<b<0cd>!<ac!d>><bd!<0cd>><0!a<ac!d>>>" ) ) },
{ 0x6f2, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0c!d>!<!ac!<bd<0c!d>>>!<0ab>>" ) ) },
{ 0x3de, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 3u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0!c<!0ad>>!<0bd><bc!<!0ad>>>" ) ) },
{ 0x18f, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<abd><0!d<abd>><!0!c<abd>>>" ) ) },
{ 0x691, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<bd!<a!bc>>!<a!bd><0!cd>>" ) ) },
{ 0x1ea, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<<!0ad>!<!0d!<bcd>>!<ad<bcd>>>" ) ) },
{ 0x7b1, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<0cd><0<0ac>!<0cd>><!a!bd>>" ) ) },
{ 0x189, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<!0ab><0!d<0ab>><!0a!c>>" ) ) },
{ 0x36b, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<bd<0ac>>!<!abc><0bc>>" ) ) },
{ 0x3d5, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<!<!0ad><!b!<b!cd><!0ad>><!0b<b!cd>>>" ) ) },
{ 0x186, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 2u}}, std::string( "<0<b!c<!0ad>><!b!d<!0!ac>>>" ) ) },
{ 0x119, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<acd><0!a!b><0ab>>" ) ) },
{ 0x368, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 3u}, {'c', 2u}, {'d', 3u}}, std::string( "<0<c!<0!b!d>!<!abc>>!<cd<0ab>>>" ) ) },
{ 0x183, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<c<0!b!c>!<c<0ad>!<0ab>>>" ) ) },
{ 0x7b5, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<!<0cd><0!a!c><ac!<ab!d>>>" ) ) },
{ 0x181, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 3u}, {'c', 3u}, {'d', 3u}}, std::string( "<!c<0<0c!d>!<!a!bc>>!<0!<0c!d>!<!a!bc>>>" ) ) },
{ 0x36e, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!ad!<0!a!b>>!<bcd><0!d!<0!a!b>>>" ) ) },
{ 0x11f, std::make_tuple( 2u, 2u, std::map<char, unsigned>{{'a', 1u}, {'b', 1u}, {'c', 2u}, {'d', 2u}}, std::string( "<!c!d<0!a!b>>" ) ) },
{ 0x16f, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0b!d>!<abd><a!b!c>>" ) ) },
{ 0x16e, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<d<b!d<0a!b>>!<bd<a!bc>>>" ) ) },
{ 0x13f, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<0!<bcd>!<0ad>>" ) ) },
{ 0x19f, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!d<0!a!b><b!c<!0ad>>>" ) ) },
{ 0x13e, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0a!d>!<bcd>!<a!d<!b!cd>>>" ) ) },
{ 0x19e, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 3u}, {'d', 2u}}, std::string( "<!d!<!0a<b!c!d>><a!c<!0bd>>>" ) ) },
{ 0x13d, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!a!bc><0b!c>!<bcd>>" ) ) },
{ 0x16b, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!a<a!b!c>!<!ad!<0bc>>>" ) ) },
{ 0x1fe, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<<!ad<!abc>>!<0d<!abc>><0a!d>>" ) ) },
{ 0x166a, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<<!a!d<!b!cd>><!0a<bcd>><0a!<bcd>>>" ) ) },
{ 0x19, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!ab!d><0a!c>!<!0ab>>" ) ) },
{ 0x6b, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!d<0b!<ab!c>>!<!abc>>" ) ) },
{ 0x69f, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<b!<abc><a!b!d>>" ) ) },
{ 0x13c, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 3u}, {'d', 2u}}, std::string( "<!c<!ac<!bcd>>!<d!<!bcd><!0!bc>>>" ) ) },
{ 0x37e, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<ab!<0!ad>>!<bcd><!ac<0!ad>>>" ) ) },
{ 0x12f, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!d!<!abc><0!a!c>>" ) ) },
{ 0x693, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<a!bc><!ab!d><0!c!<0b!d>>>" ) ) },
{ 0x12d, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<bc!d><0!a!c>!<!abc>>" ) ) },
{ 0x1ee, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<<!0a!b><a!d!<!0a!b>><d!<!0a!b>!<acd>>>" ) ) },
{ 0x12c, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<b!<bcd><<0ac>!<bcd>!<!0a!d>>>" ) ) },
{ 0x17f, std::make_tuple( 2u, 2u, std::map<char, unsigned>{{'a', 1u}, {'b', 1u}, {'c', 2u}, {'d', 2u}}, std::string( "<!a!d<a!b!c>>" ) ) },
{ 0x1796, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<b!<abc><!b<0a!d><!0cd>>>" ) ) },
{ 0x36d, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 3u}, {'d', 2u}}, std::string( "<!b<b!d<0ac>><b!c<!ad!<0ac>>>>" ) ) },
{ 0x11e, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<0!a!b>!<cd!<0!a!b>><c!<!0c!d><0!a!b>>>" ) ) },
{ 0x679, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!d<0!c<abd>><!a!b<!0cd>>>" ) ) },
{ 0x35f, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!c<0!a!d>!<0bd>>" ) ) },
{ 0x67b, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!d!<ab<0!c!d>><a!c<0bd>>>" ) ) },
{ 0x118, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<bcd><!acd><0<0ab>!<!acd>>>" ) ) },
{ 0x67a, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<cd<0ab>><0b<0!ad>><ac!<0!ad>>>" ) ) },
{ 0x117, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!a!<bcd><0!c<0!b!d>>>" ) ) },
{ 0x1ee1, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0!a!b>!<cd<0!a!b>><cd!<0!a!b>>>" ) ) },
{ 0x16a, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!abd><c!d<0a!d>>!<bc!<0a!d>>>" ) ) },
{ 0x169, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!a<0!d<abc>><a!b!c>>" ) ) },
{ 0x37d, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<!c<0!d<!0bc>><!bc<!0!ad>>>" ) ) },
{ 0x697, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<a!<abc><0!<a!bd>!<0a!c>>>" ) ) },
{ 0x6f, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!d<!ab!c><0a!b>>" ) ) },
{ 0x17ac, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<0ad><ac<0!bd>><b!c<0!bd>>>" ) ) },
{ 0x69, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<0!d<!c!<ab!c><abc>>>" ) ) },
{ 0x667, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!a<0a!b><!c!d<!0ab>>>" ) ) },
{ 0x168, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 2u}}, std::string( "<0!<bd<a!bc>><c!<a!bc>!<0!a!d>>>" ) ) },
{ 0x67e, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<!d<cd!<0ab>><a!c<0b!c>>>" ) ) },
{ 0x11b, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!c!<!0ab><ac!d>>" ) ) },
{ 0x36a, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 2u}}, std::string( "<<b!d<0a!d>><!cd<0a!d>><!bc!<0a!d>>>" ) ) },
{ 0x18b, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0!a!b><!0b!c><0a!d>>" ) ) },
{ 0x1, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<0!<!0cd>!<!0ab>>" ) ) },
{ 0x18, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!ab!d>!<!0b!c><0a!c>>" ) ) },
{ 0x168b, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 2u}}, std::string( "<<!ab<!0bc>><a!d!<!0bc>><!a!<!0bc><!b!cd>>>" ) ) },
{ 0x662, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0a!b>!<0cd><0b!<a!c!d>>>" ) ) },
{ 0xff, std::make_tuple( 0u, 0u, std::map<char, unsigned>{{'d', 0u}}, std::string( "!d" ) ) },
{ 0x168e, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<0!ad><ab!c>!<bd<0!c<0!ad>>>>" ) ) },
{ 0x7, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<0!<abc><0!c!d>>" ) ) },
{ 0x19e6, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<!<!a!d<0b!c>><b!d<0b!c>>!<abd>>" ) ) },
{ 0x116, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 3u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<0!<<b!c!d><abc>!<ab!d>>!<acd>>" ) ) },
{ 0x36c, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<!d<b!<0ac>!<!0c!d>><!bd<0ac>>>" ) ) },
{ 0x1e8, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<!d!<c<0!c!d>!<ab!<0!c!d>>><0d!<ab!<0!c!d>>>>" ) ) },
{ 0x6f0, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<!a!bc><0c!d>!<ab<0!c!d>>>" ) ) },
{ 0x3d6, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 2u}}, std::string( "<<!bc!<!ab!d>>!<0c!<!ab!d>><0!d<!abc>>>" ) ) },
{ 0x1be4, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 3u}, {'c', 3u}, {'d', 3u}}, std::string( "<!d<d<abc>!<0b!c>><d!<abc><0b!c>>>" ) ) },
{ 0x187, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 3u}, {'c', 3u}, {'d', 2u}}, std::string( "<!<0d<abd>><0c<abd>>!<!0c<abd>>>" ) ) },
{ 0x3, std::make_tuple( 2u, 2u, std::map<char, unsigned>{{'b', 1u}, {'c', 2u}, {'d', 2u}}, std::string( "<0!d!<bc!d>>" ) ) },
{ 0x17e, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<0!<cd<ab!c>>!<0!<ab!c><0!c!d>>>" ) ) },
{ 0x1eb, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<0ad><a!b!c><0b<!bc!d>>>" ) ) },
{ 0x6, std::make_tuple( 3u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<0<ab!d>!<abc>>" ) ) },
{ 0x11a, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<!<acd><0a!<acd>><!bcd>>" ) ) },
{ 0x369, std::make_tuple( 5u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 2u}}, std::string( "<<!b!c<0a!d>><!bc!<0a!d>><0b!d>>" ) ) },
{ 0x3d9, std::make_tuple( 6u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 3u}, {'d', 3u}}, std::string( "<<0a<!ab!d>><!0<!ab!d><b!cd>>!<0b<b!cd>>>" ) ) },
{ 0x0, std::make_tuple( 0u, 0u, std::map<char, unsigned>{}, std::string( "0" ) ) },
{ 0x19b, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<a<0!a!b><!d<0!a!b>!<0!bc>>>" ) ) },
{ 0x1668, std::make_tuple( 6u, 4u, std::map<char, unsigned>{{'a', 3u}, {'b', 3u}, {'c', 3u}, {'d', 3u}}, std::string( "<!0<0!<bd<ac!d>><acd>><0<bd<ac!d>>!<acd>>>" ) ) },
{ 0x18e7, std::make_tuple( 4u, 2u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<<!a!cd>!<b!cd><ab!d>>" ) ) },
{ 0x17, std::make_tuple( 2u, 2u, std::map<char, unsigned>{{'a', 1u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<0!d!<abc>>" ) ) },
{ 0x19a, std::make_tuple( 5u, 4u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 3u}}, std::string( "<!<ad<0!bc>><0a!<ad<0!bc>>>!<b!d!<0!bc>>>" ) ) },
{ 0x16, std::make_tuple( 4u, 3u, std::map<char, unsigned>{{'a', 2u}, {'b', 2u}, {'c', 2u}, {'d', 2u}}, std::string( "<0!<bc<a!b!c>><a!d!<a!b!c>>>" ) ) },
{ 0x1669, std::make_tuple( 7u, 4u, std::map<char, unsigned>{{'a', 3u}, {'b', 2u}, {'c', 1u}, {'d', 4u}}, std::string( "<c!<bc<a!<0a!d><0!a!d>>><!c<!ab<0a!d>><a!<0a!d><0!a!d>>>>" ) ) }
};

/******************************************************************************
 * Private functions                                                          *
 ******************************************************************************/

/******************************************************************************
 * Public functions                                                           *
 ******************************************************************************/

}

// Local Variables:
// c-basic-offset: 2
// eval: (c-set-offset 'substatement-open 0)
// eval: (c-set-offset 'innamespace 0)
// End:
